home *** CD-ROM | disk | FTP | other *** search
- Warp Engine V1.0 Readme
- -----------------------
-
- This engine is a tiny 3D engine in the style of games like System
- Shock. Essentially, a level is made up of 64x64 pixel grids, with
- arbitrary topology cells constructed from polygons that are not
- allowed to overlap the cell boundary. This allows for easy HSE by
- a breadth-first traversal of the map from the player position.
- Clipping is done in camera space before the actual projection.
- Each cell is convex, so that each cell may be rendered in any
- given order (a more complex cell layout would be easy to achieve,
- although this would require some kind of depth sorting like BSP
- trees).
-
- Textures are "borrowed" from the source code distribution of
- Alien Breed 3 - Killing Ground. I have converted some of them
- into PNG format, which the engine can load. The "data/" directory
- contains the level and font, the former being a simple text file
- which is also commented, just in case you are mad enough to try
- and modify it a bit, although this is tedious work without a
- level editor.
-
- Source is also included in the developer archive. I intended to
- write a game with this, but I now have something better in mind
- (more in the line of Quake), so I release this source code as a
- kind of tutorial on Warp3D programming (and perhaps also as a
- tutorial on 3D programming, although much of the stuff could be
- improved). Much of this was inspired (in style and technique) by
- the two programs "Descent" and "QMap", the former being a first
- person shooter by Parallax software (and ported to the Amiga by
- my brother and me), the second being a Quake Level viewer by Sean
- Barret, which I studied while investigating 3D rendering
- techniques used by Quake. Although my code does not contain
- actual code from those, it was in places heavily inspired by them
- :-) If you want to use the code, go ahead, just don't sell it,
- and give me credit. To compile, you will need SAS/C (StormC
- should also do, GNU C with minor modifications) and GNUMake. I
- only provide a GNU makefile, SMake is far too limited for my
- taste. To use the makefile you will also need a fairly well
- installed ADE/Geek Gadgets distribution, namely the fileutils and
- binutils.
-
- In the demo, press the right mouse button and roll your rat to
- move the view. The 's' and 'x' keys move forward/backwards, there
- are also some other keys mapped (play around a bit). No collusion
- detection is done yet, so you can actually walk through walls.
- Also, the depth sorting is a bit broken, since I use a recursive
- call, and hence a stack, for traversal, which is of course utter
- bullshit, since it should use a queue. The net result is that
- there might be overhanging polygons in certain places, but I
- won't fix that (try if you like). Hey, if you do a bigger level,
- please let me have it, too (although I doubt that anyone will do
- that!).
-
- The FPS counter in the lower console will only update every five
- or so seconds, so give it a few moments to come to live - the
- first FPS reading will be too low, because the startup and
- loading is also measured. Also, when you change one of the
- features (mapping, filtering), ignore the first measure, as it
- will also be unnprecise. Moving the mouse pointer to the top of
- the screen reveals a menu. Click a title with the left mouse
- button, keep it pressed and release it over your choice to
- select. Finally, press ESC to quit.
-
- Note that this is a very simple engine, yet it serves as a small
- hint at what is possible with 3D hardware. The window at the cell
- in front of you is transparent, and the color can be toggled in
- the second menu. The red flashlight is dynamically implemented as
- gouraud shading, this comes almost for free on 3D hardware (the
- overhead can be neglected). On my machine, I get about 34 FPS
- with all features enabled, about 70 when everything is switched
- off. This is on a Z2 machine, an Amiga 2000 with Blizzard
- 2060/50, and it shows what 3D Hardware can do for a Z2 based
- machine (of course, it's hard to beat such speeds on a Z3 machine
- too).
-
- On the topic of speed, this demo might or might not run a bit
- slower on Picasso96. This is mostly due to the fact that
- Picasso96 seems to sync the ScrollVPort to the Screen updates, so
- that some time is actually "wasted" on waiting for the sync.
- While this gives a slight impact on performance, it also makes
- the thing look a bit cleaner. In fact, the ScrollVPort should no
- longer be used for Double buffering, alas, I've done it in this
- demo for a number of reasons:
-
- - Not all CyberGraphX installations can really do V39
- Multi-Buffering.
-
- - The Multi-Buffering code I've actually written is buggy, and I
- just didn't have the time to look after it, and since it works
- with the ScrollVPort, I didn't bother to look after it.
- After all, we wanted to get Warp3D on the road.
-
- I have included a screen mode requester, so that you can try out
- different screen modes. I get around 34 FPS in 320x240, 13 FPS in
- 640x480 and around 1.9 FPS in 1024x768... If you have a 320x400
- 15 bit mode, try this, it's still quite usable. Note however,
- that the engine does not take the aspect ratio of the screen into
- account, making the 320x400 mode look a bit streched. This would
- be easy to fix, I just didn't have the time. The whole engine was
- the work of about a week or so, but I knew pretty well what I was
- doing from the start.
-